<?php
###############################################################################
# PHP-CLI merge.php v0.1
# Cree par Bertrand Dupraz
#
# - Prend le dossier passe en parametre et verifie le parametre et 
# l'arborescence interne.
# - Concatene les presentations contenues dans le fichier list.xml et les
# ajoute dans le model.odp pour en faire une seule presentation.
#
# Modifications :
#   - 16 Mars 2011 (Bertrand D.) : Creation, test du parametre donne
###############################################################################

// Numero de version du script
$version = "v1.0";

// Demarrage du script
system('clear');
printf("################################################## \n");
printf("#               ODP Merger ".$version."                  # \n");
printf("################################################## \n");

#------------------------------------------------------------------------------
# Verification que le parametre est bien un dossier
printf("Vérification du paramètre passé... ");
if ( check_parameters($argv) )
{
  printf("Terminé.\n");
  # Cas ou le parametre est present et est un dossier
  $dir = $argv[1];
  
  #----------------------------------------------------------------------------
  # Test du contenu du dossier
  printf("Vérification du contenu du dossier passé en paramètre... ");
  if ( !test_dir_content($dir) )
  {
    return;
  }
  printf("Terminé.\n");

  #----------------------------------------------------------------------------
  # Décompression des fichiers odp du dossier src.
  printf("Décompression des fichiers .ODP du dossier source...");
  include_once("util/pclzip.lib.php");
  $src_dir = opendir($dir);
  while( $file = readdir($src_dir) )
  {
      if( eregi(".odp$", $file) )
      {    
          $zipHandler = new PclZip($dir.$file);
          $zipHandler->extract($p_path="./src/".$file."_FILES/");
      }
  }
  printf("Terminé.\n");  
  #----------------------------------------------------------------------------
  
  #----------------------------------------------------------------------------
  # Copy le fichier list.xml à coté des .xsl
  copy($dir."/list.xml", "./list.xml");
  #----------------------------------------------------------------------------
  
  #----------------------------------------------------------------------------
  # Execute le merge en xsl.
  printf("Concatenation les présentations .ODP en une seule présentation... ");
  if( !is_dir("./output") )
  {
    System("mkdir ./output/");
    System("mkdir ./output/web/");
  }
  System("xsltproc contenu.xsl ./src/modele.odp_FILES/content.xml > content.xml");
  print("Terminé.\n");
  
  print("Copie des images dans le dossier de la nouvelle présentation... ");
  # Copie les images des différentes présentations dans le dossier Pictures de modele.
  System("mkdir ./src/modele.odp_FILES/Pictures/");
  System("cp ./src/*.odp_FILES/Pictures/* ./src/modele.odp_FILES/Pictures/"); 
  copy("./content.xml", "./src/modele.odp_FILES/content.xml");
  print("Terminé.\n");
  #----------------------------------------------------------------------------
  
  #----------------------------------------------------------------------------
  # Copie du fichier content.xml dans le dossier modele.odp_FILES puis compression de modele.odp et suppression de
  printf("Compression de la présentation modele.odp... \n");
  System("cp -r ./src/modele.odp_FILES/* ./");
  if( file_exists("./output/modele.odp") )
  {
    System("rm ./output/modele.odp");
  }
  System("zip -r ./output/modele.odp ./Configurations2 ./content.xml ./META-INF ./meta.xml ./mimetype ./settings.xml ./styles.xml ./Thumbnails ./Pictures");
  System("rm -r ./Configurations2 ./META-INF ./meta.xml ./mimetype ./settings.xml ./Thumbnails");
  printf("Terminé.\n");
  #----------------------------------------------------------------------------
  
  #----------------------------------------------------------------------------
  # Création du HTML et du CSS associé.
  printf("Création de la présentation au format HTML... ");
  copy("./src/modele.odp_FILES/styles.xml", "./styles.xml");
  System("xsltproc create_html.xsl ./content.xml > ./output/web/presentation.html");
  System("xsltproc create_css_from_styles.xsl ./styles.xml > ./output/web/stylepredef.css");
  System("xsltproc create_css_from_content.xsl ./content.xml > ./output/web/style.css");
  if( !is_dir("./output/web/Pictures") )
  {
    System("mkdir ./output/web/Pictures");
  }
  System("cp -r ./Pictures/* ./output/web/Pictures");
  System("cp ./timesheets.js ./output/web/");
  printf("Terminé.\n");
  #----------------------------------------------------------------------------
  
  #----------------------------------------------------------------------------
  # Nettoyage des fichiers temporaires.
  printf("Suppression des fichiers temporaires et nettoyage du répertoire de travail... ");
  System("rm content.xml");
  System("rm styles.xml");
  System("rm list.xml");
  System("rm -r ./src ./Pictures");
  printf("Terminé.\n");
  
  printf("Opération terminée, vous pouvez désormais récupérer la présentation concatenée dans le dossier ./output/, ainsi que celle au format HTML dans le dossier ./output/web/\n");
}
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# Fonction qui verifie la presence des fichiers list.xml, modele.odp, etc
function test_dir_content($dir)
{
  if ( file_exists($dir.'list.xml') && file_exists($dir.'modele.odp') )
  {
    return true;
  }
  else
  {
    printf("Fichier list.xml ou modele.odp absent(s) dans le dossier : ".$dir.". \n");
    return false;
  }
}
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
# Fonction qui verifie la presence et la coherence du paramètre passé.
function check_parameters($arg)
{
  if ( !isset($arg[1]) )
  {
    # Cas ou aucun parametre est passe
    printf("Vous n'avez pas passe de parametre, la commande pour lancer le script est la suivante : ");
    printf("php merge.php @nom_du_dossier \n");
  
    return false;
  } 
  else if ( isset($arg[2]) ) 
  {
    # Cas ou trop de parametres sont passe
    printf("Vous avez passe trop de parametres, la commande pour lancer le script est la suivante : ");
    printf("php merge.php @nom_du_dossier \n");
    
    return false;
  }
  else if ( !is_dir($arg[1]) )
  {
    # Cas ou le parametre passe est un fichier
    printf("Vous avez passe un fichier en parametre, la commande pour lancer le script est la suivante : ");
    printf("php merge.php @nom_du_dossier \n");
    
    return false;
  }
  else
  {
    return true;
  }
}
?>